/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */

package Controller;

import Exceptions.ConfigFileNotLoadedException;
import Exceptions.InvalidGraphException;
import UserInterface.Shape;
import java.io.File;
import java.io.FileNotFoundException;
import java.util.List;

/**
 *
 * @author subx
 */
public interface ISRCFacade {

    /**
     * Retorna a informação da instância carregada pelo usuário.
     *
     * @param index ID da informação desejada.
     * @return Array contendo as informações da instância.
     * -> NAME | AUTHOR | CITY | STATE | LOCATION | NODES | EDGES | DIST | WEIGHT
     */
    public String[] getInfos() throws ConfigFileNotLoadedException;

    /**
     * Carrega as informações do arquivo file para a memória e gera o grafo que
     * será utilizado no programa.
     * 
     * @param file Arquivo de configuração
     * @throws FileNotFoundException
     */
    public void loadConfig(File file) throws FileNotFoundException;

    /**
     * Descarrega as configurações da instância atual.
     *
     * @throws ConfigFileNotLoadedException
     */
    public void disposeConfig() throws ConfigFileNotLoadedException;

    public List<Node> getNodes() throws ConfigFileNotLoadedException;

    public List<List<Edge>> getEdges() throws ConfigFileNotLoadedException;

    /**
     *
     * @return
     */
    public File getConfigFile() throws ConfigFileNotLoadedException;

    public boolean checkgraph() throws InvalidGraphException;

    public void play(int maxDist);
}
